package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.AreaProcessual;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="areaProcessualFaces")
@ViewScoped
public class AreaProcessualFaces extends FacesUtil {
	
	private static final long serialVersionUID = 4620989756344415646L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<AreaProcessual> logicaAreaProcessual;
	
	private AreaProcessual areaProcessual = new AreaProcessual();
	private List<AreaProcessual> listaAreaProcessual = new ArrayList<>();
	private String areaProcessualBusca;

	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaAreaProcessual.adicionar(areaProcessual);
				adicionarMensagem("Área Processual adicionada com sucesso");
				this.buscarAreaProcessual();
				fecharModal("dialogAreaProcessual");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Área Processual");
		}
	}
	
	public void prepararAdicionar() {
		this.areaProcessual = new AreaProcessual();
		abrirModal("dialogAreaProcessual");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.areaProcessual = logicaAreaProcessual.obterPorId(AreaProcessual.class,idArea);
			
			if (editar) {
				abrirModal("dialogAreaProcessual");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaAreaProcessual.editar(this.areaProcessual);
				adicionarMensagem("Área Processual editada com sucesso");
				fecharModal("dialogAreaProcessual");
				this.buscarAreaProcessual();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Área Processual");
		}
	}
	
	public void remover() {
		try {
			logicaAreaProcessual.remover(AreaProcessual.class, this.areaProcessual.getId());
			adicionarMensagem("Área Processual removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarAreaProcessual();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Área Processual");
		}
	}
	
	public void buscarAreaProcessual() {
		if (listaAreaProcessual != null) {
			this.listaAreaProcessual.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(areaProcessualBusca)) {
				this.listaAreaProcessual =  logicaAreaProcessual.buscarTodos(AreaProcessual.class, "area");
			} else {
				this.listaAreaProcessual = logicaAreaProcessual.buscarPorCampo(AreaProcessual.class, "area", areaProcessualBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.areaProcessual.getArea())) {
			adicionarMensagem("O campo área é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setLogicaAreaProcessual(DefaultLogicaContract<AreaProcessual> logicaAreaProcessual) {
		this.logicaAreaProcessual = logicaAreaProcessual;
	}

	public List<AreaProcessual> getListaAreaProcessual() {
		return listaAreaProcessual;
	}

	public void setListaAreaProcessual(List<AreaProcessual> listaAreaProcessual) {
		this.listaAreaProcessual = listaAreaProcessual;
	}

	public String getAreaProcessualBusca() {
		return areaProcessualBusca;
	}

	public void setAreaProcessualBusca(String areaProcessualBusca) {
		this.areaProcessualBusca = areaProcessualBusca;
	}

	public AreaProcessual getAreaProcessual() {
		return areaProcessual;
	}

	public void setAreaProcessual(AreaProcessual areaProcessual) {
		this.areaProcessual = areaProcessual;
	}
	
	
}